class Personale::RapportiDiLavoroController < DefaultController
  require_role self.parent_name.underscore
  active_scaffold :rapporto_di_lavoro do |config|
    config.label = Application.controller_label(self)
    config.actions.add :config_list, :export, :field_search
    
    config.columns[:personale].sort_by :sql => 'personale.cognome'
    list.sorting = [{:personale => 'ASC'}, {:data_inizio => 'DESC'}]
    
    # visualizzazione colonne
    long_fields = [ :attivo, :personale, :matricola, :tipo_rapporto_di_lavoro, :data_inizio, :data_fine, :durata, :proroga, :ccnl,
      :livello_ccnl, :posizione_inail, :posizione_inps, :indennita_mansione, :cessione_quota_stipendio, :annotazioni, :orario_di_lavoro ]
    short_fields = [ :attivo, :matricola, :personale, :tipo_rapporto_di_lavoro, :data_inizio, :data_fine, :livello_ccnl, :orario_di_lavoro ]
    extra_fields = [ :attivo, :durata, :part_time, :percentuale_part_time ]
    config.columns = config.list.columns = config.show.columns = config.update.columns = config.create.columns = long_fields + extra_fields
    config.field_search.columns = long_fields + extra_fields
    config.field_search.columns.exclude :orario_di_lavoro
    config.config_list.default_columns = short_fields + [:durata]
    config.update.columns.exclude extra_fields
    config.create.columns.exclude extra_fields

    # configurazione colonne
    config.columns[:indennita_mansione].description = "Importo lordo"
    config.columns[:proroga].options = {:options => RapportoDiLavoro::PROROGA.map(&:to_sym), :include_blank => as_(:_select_)}
    config.columns[:ccnl].update_column = :livello_ccnl
    [ :personale, :tipo_rapporto_di_lavoro, :ccnl, :proroga, :livello_ccnl, :posizione_inps, :posizione_inail].each { |i|
      config.columns[i].form_ui = :select }
    [ :matricola, :data_inizio, :data_fine, :tipo_rapporto_di_lavoro, :ccnl,
      :livello_ccnl, :posizione_inail, :posizione_inps, :proroga, :indennita_mansione,
      :cessione_quota_stipendio, :annotazioni ].each { |i| config.columns[i].inplace_edit = :ajax }
    [:data_inizio, :data_fine].each { |i|
      config.columns[i].form_ui = :calendar_date_select
      config.columns[i].options = {:year_range => [2.years.ago, 2.years.from_now]}
    }
    [:cessione_quota_stipendio, :annotazioni].each { |i|
      config.columns[i].options = SMALL_TEXTAREA
    }
    config.columns[:orario_di_lavoro].allow_add_existing = false
    config.columns[:orario_di_lavoro].actions_for_association_links = [:show]
    config.columns[:orario_di_lavoro].sort_by :sql => 'orari_di_lavoro.ore_settimanali'
    [:tipo_rapporto_di_lavoro, :ccnl].each { |i| config.columns[i].search_ui = :multi_select }
    config.columns[:percentuale_part_time].options[:format] = :percentage
    config.columns[:indennita_mansione].options[:format] = :currency
    config.columns[:attivo].form_ui = :checkbox

    config.columns[:personale].set_link('show', :controller => 'anagrafiche/personale')
    config.action_links.add "Note", :action => 'nested', :parameters => {:associations => :note}, :type => :member
    config.action_links.add "Allegati", :action => 'nested', :parameters => {:associations => :allegati}, :type => :member
  end
  
  def gantt
    render :action => 'gantt', :layout => 'default'
  end

  def all
    params[:filter] = 'all'
    active_scaffold_config.label = Application.controller_label(self) + " (tutti)"
    index
  end

  def attivi
    params[:filter] = 'attivi'
    active_scaffold_config.label = Application.controller_label(self) + " (attivi)"
    index
  end

  def calcolo_part_time(record)
    part_time = percentuale_part_time = 0
    if !record.orario_di_lavoro.nil?
      percentuale_part_time = ( record.orario_di_lavoro.ore_settimanali / record.ccnl.ore_settimanali ) * 100
      part_time = 1 unless (percentuale_part_time >= 100)
    end
    record.update_attributes(:percentuale_part_time => percentuale_part_time, :part_time => part_time)
  end

  def calcolo_durata(record)
    if !record.data_fine.nil?
      durata = record.data_fine-record.data_inizio
      record.update_attributes(:durata => durata)
    end
  end

  def after_create_save(record)
    calcolo_part_time(record)
    calcolo_durata(record)
  end

  def after_update_save(record)
    calcolo_part_time(record)
    calcolo_durata(record)
  end

  protected
  
  def set_conditions
    case params[:filter]
    when 'all'
      []
    when 'attivi'
      ["(data_fine IS NULL OR data_fine = 0 OR data_fine > ?)", 1.day.ago.to_date]
    else
      []
    end
  end
  
  def conditions_for_collection
    set_conditions
  end

  def record_select_conditions_from_controller
    set_conditions
  end 

end
